using UnityEngine;

public class ItemPickup : MonoBehaviour
{
    // 定义一个公共字段 item，表示掉落的物品对象
    public Item item;
    public Items itemDrop;

    void Start()
    {
        // 调用 AssignItem 方法，传入掉落的物品类型，并将返回值赋值给 item
        item = AssignItem(itemDrop);
    }

    // 触发器检测
    private void OnTriggerEnter(Collider other)
    {
        // 判断进入碰撞体的对象是否为玩家
        if (other.tag == "Player")
        {
            // 获取玩家对象
            Player player = other.GetComponent<Player>();

            // 调用 AddItem 方法，传入玩家对象
            AddItem(player);

            // 销毁 Pickup 对象
            Destroy(this.gameObject);
        }
    }

    // 声明一个返回 Item 类型的方法 AssignItem，传入一个 Items 枚举类型的参数 itemToAssign
    public Item AssignItem(Items itemToAssign)
    {
        // 根据不同的物品类型返回不同的物品对象
        switch (itemToAssign)
        {
            case Items.HealingItem:
                return new HealingItem();
            case Items.FireDamageItem:
                return new FireDamageItem();
            case Items.HealingAreaItem:
                return new HealingArea();
            default:
                return new HealingItem();
        }
    }

    public void AddItem(Player player)
    {
        // 遍历玩家物品列表中的每个物品
        foreach (ItemList i in player.items)
        {
            // 如果该物品已经存在于列表中，则将该物品的叠加数量加 1，并直接返回
            if (i.name == item.GiveName())
            {
                i.stacks += 1;
                return;
            }
        }

        // 将新的物品添加到玩家物品列表中
        player.items.Add(new ItemList(item, item.GiveName(), 1));
    }
}

// 定义一个公共枚举类型 Items，表示所有可用的物品类型
public enum Items
{
    HealingItem,
    FireDamageItem,
    HealingAreaItem
}